package com.yonyou.gmmc.service.customer.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.marketing.common.dms.dto.ResultCouponMessageDetail;
import org.marketing.common.dto.carOwner.CarOwnerDto;
import org.marketing.common.dto.customerInfo.CarInfoDto;
import org.marketing.common.dto.customerInfo.CounselorDto;
import org.marketing.common.dto.customerInfo.MemberDto;
import org.marketing.common.dto.leads.InsuranceDto;

import com.yonyou.gmmc.common.annotation.OracleDb;
import com.yonyou.gmmc.service.customer.entity.CarOwnerPO;
import com.yonyou.gmmc.service.customer.entity.ConsumeCouponPO;
import com.yonyou.gmmc.service.customer.entity.PotentialUserPO;
import com.yonyou.gmmc.service.customer.model.TmPotentialUser;

import tk.mybatis.mapper.common.Mapper;
@OracleDb
public interface TmPotentialUserMapper extends Mapper<TmPotentialUser> {
    
	public Map<String,Object> queryFans(@Param("openId") String openId);
	
    /**
    * 會員中心信息查詢
    * @author QianKun
    * @date 2017年2月28日
    * @param potentialUserId
    * @return
    */
    public List<MemberDto> queryMember(@Param("userId") String userId);

    /**
    * 潜客信息
    * @author QianKun
    * @date 2017年3月16日
    * @param potentialUserId
    * @return
    */
    public List<MemberDto> queryPotential(@Param("openId") String openId);

    /**
    * 判断是否为车主
    * @author QianKun
    * @date 2017年3月17日
    * @param openId
    * @return
    */
    public List<MemberDto> queryUserOwner(@Param("userId") String userId);
    
    /**
    * 更新会员信息(车主)
    * @author QianKun
    * @date 2017年3月1日
    * @param memberDto
    * @return
    */
    public long updateCarOwnerInfo(MemberDto memberDto);

    /**
    * 更新会员信息(潜客)
    * @author QianKun
    * @date 2017年3月1日
    * @param memberDto
    * @return
    */
    public long updatePotentialInfo(MemberDto memberDto);

    /**
    * 更新会员信息(顾问)
    * @author QianKun
    * @date 2017年3月1日
    * @param memberDto
    * @return
    */
    public long updateCounselorInfo(MemberDto memberDto);

    public int insertCounselorInfo(MemberDto memberDto);
    
    public String selectCounselor(@Param("potentialUserId") Integer potentialUserId);
    

    /**
    * 注册会员(车主)
    * @author QianKun
    * @date 2017年3月8日
    * @param memberDto
    * @return
    */
    public void saveCarOwner(@Param("CarOwnerDto") CarOwnerDto CarOwnerDto);
    
    /**
    * 根据手机号查车主信息
    * @author Administrator
    * @date 2017年3月16日
    * @param phone
    * @return
    */
    public Integer queryCarOwner(@Param("phone") String phone);

    /**
    * 添加车主-潜客绑定关系
    * @author QianKun
    * @date 2017年3月16日
    * @param CarOwnerDto
    */
    public void saveCarOwnerRelation(@Param("CarOwnerDto") CarOwnerDto CarOwnerDto);

    /**
    * 更新验证码
    * @author QianKun
    * @date 2017年3月8日
    * @param memberDto
    * @return
    */
    public long updateIdentifyingCode(MemberDto memberDto);
    
    /**
     * 查询验证码
     * @author QianKun
     * @date 2017年3月8日
     * @param memberDto
     * @return
     */
     public List<MemberDto> queryIdentifyingCode(String openId);
    
    /**
    * 销售/售后顾问查询
    * @author WangHuicheng
    * @date 2016年12月14日
    * @param positionId 销售、售后顾问角色ID
    * @param dealerCode 经销商代码
    * @return 服务顾问列表
     */
    public List<CounselorDto> queryCounselorData(@Param("dealerCode") String dealerCode,@Param("positionId") String positionId);
 
    /**
    * 更改潜客DealerCode
    * @author QianKun
    * @date 2017年3月27日
    * @param memberDto
    * @return
    */
    public long updateDealerCode(MemberDto memberDto);
    
    /**
    * 更新用户关注状态
    * @author Administrator
    * @date 2017年4月6日
    * @param memberDto
    * @return
    */
    public long updateStatus(MemberDto statusDto);

    /**
    * 更新潜客信息
    * @author Administrator
    * @date 2017年4月5日
    * @param Imgurl
    * @param openId
    * @return
    */
    public long updateHeadImgUrl(MemberDto memberDto);
 
    /**
    * 个人资料查询
    * @author Administrator
    * @date 2017年4月28日
    * @param openId
    * @return
    */
    public List<MemberDto> queryCustomerInfo(String openId);

    /**
     * 查询企业潜客会员
     * @param openId
     * @return
     */
	public List<MemberDto> queryThirdPotential(String openId);

	/**
	 * 新增第三车主
	 * @param phone
	 */
	public void saveThirdCarOwner(@Param("carOwnerId")Long carOwnerId,@Param("phone") String phone);
	
	/**
	 * 根据电话查询用户积分
	 * @param mobile
	 * @return
	 */
	public Map<String, Object> getPointsByMobile(String mobile);

	/**
	 * 查询验证码（DCMS扣减积分）
	 * @param openId
	 * @return
	 */
	public List<MemberDto> queryPointIdenCode(String openId);

	/**
	 * 存入验证码(DCMS扣减积分)
	 * @param memberDto
	 */
	public void updatePointIdenCode(MemberDto memberDto);

	/**
	 * 查验证码信息(DCMS扣减积分)
	 * @param openId
	 * @return
	 */
	public List<MemberDto> queryPointPotential(@Param("openId") String openId);
	
	/**
	 * 查询经销商名称(DCMS调用)
	 * @param afterSalesCode
	 * @return
	 */
	public String getDelearName(@Param("afterSalesCode") String afterSalesCode);

	/**
	 * 判断记录是否存在（DCMS调用）
	 * @param userId
	 * @param point
	 * @param workOrderNo
	 * @return
	 */
	public Integer checkLog(@Param("userId") Integer userId, @Param("point") Integer point, @Param("workOrderNo") String workOrderNo);

	/**
	 * 企业注册使用查询车主id
	 * @return
	 */
	public Long quertCarOwnerId();
	
	/**
     * 企业注册使用更新车主手机号码
     * @param carUserId
     * @param phone
     */
    public void updateCarOwnerPhone(@Param("carUserId") Long carUserId,@Param("phone") String phone);

    public Integer selectRegistCount(@Param("openId") String openId);
    public Date selectRegistCountDate(@Param("openId") String openId);
    public int updateRegisterCounter(TmPotentialUser record);

    public Integer selectBindingCount(@Param("openId") String openId);
    public Date selectBindingCountDate(@Param("openId") String openId);
    public int updateBindingCounter(TmPotentialUser record);
    
    
    public String selectRandom (@Param("openId") String openId);
    
    /**
	 * 根据openid查询用户id
	 * @param openid
	 */
	public Integer queryPotentialId(String openId);
    
	public String selectComplaintNumber(@Param("potentialId") Integer potentialId);
	
	public Map<String,Object> selectInformation(@Param("openId") String openId);
	
	/**
	 * 查询有效优惠券（IC015）
	 * @param mobile
	 * @return
	 */
	public List<ResultCouponMessageDetail> queryCoupon(@Param("mobile") String mobile, @Param("afterSalesCode") String afterSalesCode);

	/**
	 * 查询优惠券是否存在（IC016）
	 * @param cardNo
	 * @param mobile
	 * @param afterSalesCode
	 * @return
	 */
	public Map<String, Object> queryExistCoupon(@Param("cardNo") Long cardNo, @Param("mobile") String mobile, @Param("status") Integer status);

	/**
	 * 查询优惠卷验证码（IC016）
	 * @param openId
	 * @return
	 */
	public List<MemberDto> queryCouponIdenCode(String openId);

	/**
	 * 存入优惠卷验证码（IC016）
	 * @param memberDto
	 */
	public void updateCouponIdenCode(MemberDto memberDto);

	/**
	 * 查询是否存在核销的优惠卷（IC016）
	 * @param consumeCouponPO
	 * @return
	 */
	public Integer checkCouponLog(ConsumeCouponPO consumeCouponPO);

	/**
	 * 核销优惠卷（IC016）
	 * @param consumeCouponPO
	 * @param potentialUserId
	 * @param couponRemarks
	 */
	public void consumeCoupon(@Param("cardNo") Long cardNo, @Param("workOrderNo") String workOrderNo, @Param("afterSalesCode") String afterSalesCode, @Param("potentialUserId") Integer potentialUserId, @Param("couponRemarks") String couponRemarks);

	/**
	 * 取消优惠卷核销（IC016）
	 * @param consumeCouponPO
	 * @param potentialUserId
	 * @param couponRemarks
	 */
	public void cancelConsumeCoupon(@Param("cardNo") Long cardNo, @Param("potentialUserId") Integer potentialUserId, @Param("couponRemarks") String couponRemarks);

	/**
	 * 查询验证码（IC016）
	 * @param openId
	 * @return
	 */
	public List<MemberDto> queryCouponPotential(String openId);

	
	/**
	 * 通过openID查询userId
	 * @param openId
	 * @return
	 */
	public Integer queryUserId(String openId);

	public String selectDealerName(@Param("dealerCode") String dealerCode);

    public String selectTicketName(@Param("cardNo") Long cardNo);

    /**
     * 查询未工单评价个数
     * @param openId
     * @return
     */
	public Integer queryEvaluationNum(@Param("openId") String openId);

	public void emptyCouponIdenDate(Integer potentialUserId);

	public void emptyPointIdenCode(String openId);

	public Long queryPotentialUserId(Long userId);
	
	public List<String> selectBirthday();

	
	/**
	 * 清除自动绑车相关数据
	 * @param deviceOpenId
	 */
	public void clearQrCodeData(@Param("deviceOpenId")String deviceOpenId);
	
	public List<CarInfoDto> getCarInfo(@Param("vin") String vin,@Param("engine") String engine);

	//PC后台潜客查询
	public List<PotentialUserPO> queryPotentialList(Map<String, Object> queryMap);

	//PC后台车主查询
	public List<CarOwnerPO> queryCarOwnerList(Map<String, Object> queryMap);
	public List<InsuranceDto> getInsurance();
	public Integer checkCarBindExist(@Param("vin") String vin,@Param("engine") String engine);

	//根据电话查询userId 不加判断条件source_type
	public Integer queryCarOwnerId(String phone);

	//查询潜客ID 加判断条件source_type
	public Long queryPotentialIdByType(@Param("userId") Long userId,@Param("sourceType") Integer sourceType);

	/**
	 * 通过openId查询潜客信息
	 * @param openId
	 * @return
	 */
	public List<TmPotentialUser> queryPotentialUser(@Param("openId") String openId);

	/**
    * 判断是否为车主
    * @author QianKun
    * @date 2017年3月17日
    * @param openId
    * @return
    */
    public List<MemberDto> queryUserOwner2(@Param("openId") String openId);

}